﻿using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;

namespace RobotsSample
{
    /// <summary>
    /// 遥控小车、蛇、双足、双轮、攀爬、仿生蜘蛛、X轮式
    /// </summary>
    public enum RobotTypeEnum
    {
        Car = 1,
        Snake = 2,
        Bipe = 3,
        Climber = 4,
        Spider = 5,
        XWheel = 6
    }

    /// <summary>
    /// MiniBotAlgorithmLib算法中设置关节角度的回调函数定义
    /// 参数：模块ID，角度（I:正负180；T：正负90；G：0到90）
    /// </summary>
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void SetPositionCallback(byte id, double angle);

    /// <summary>
    /// MiniBotAlgorithmLib算法中以指定速度百分比设置关节角度的回调函数定义
    /// 参数：模块ID，角度（I:正负180；T：正负90；G：0到90），速度百分比
    /// </summary>
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void SetPositionWithSpeedCallback(byte id, double angle, int speedPercent);

    /// <summary>
    /// MiniBotAlgorithmLib算法中设置多个关节角度的回调函数定义
    /// 参数：模块ID数组，角度数组，数组长度
    /// </summary>
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void SetMultiPositionCallback(IntPtr ids, IntPtr angles, int count);

    /// <summary>
    /// MiniBotAlgorithmLib算法中以指定速度设置多个关节角度的回调函数定义
    /// 参数：模块ID数组，角度数组，数组长度，速度百分比
    /// </summary>
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void SetMultiPositionWithSpeed(IntPtr pids, IntPtr pangles, int count, int speedPercent);

    /// <summary>
    /// MiniBotAlgorithmLib算法中设置关节速度的回调函数定义
    /// 参数：模块ID，速度百分比（0到100）
    /// </summary>
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void SetSpeedCallback(byte id, int speedPercent);

    /// <summary>
    /// MiniBotAlgorithmLib算法中设置关节是否使能的回调函数定义
    /// 参数：模块ID，是否使能（转矩是否生效）
    /// </summary>
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void SetTorqueEnableCallback(byte id, bool isEnable);

    /// MiniBotAlgorithmLib算法中设置模块运行模式的回调函数定义
    /// 参数：模块ID，模式值(0:位置模式；1:速度模式；2:PWM开环调速度模式；)
    /// </summary>
    [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
    public delegate void SetModeCallback(byte id, int mode);
}
